package com.zhihaoliang.baseframe.db.dao;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;

import com.zhihaoliang.baseframe.db.entity.ProductEntity;

import java.util.List;

/**
 * 创建日期：2020-02-24
 * 描述:产品的数据库操作
 * 作者:支豪亮
 */
@Dao
public interface ProductDao {
    @Query("SELECT * FROM products")
    LiveData<List<ProductEntity>> loadAllProducts();

    /**
     * 1. OnConflictStrategy.REPLACE：冲突策略是取代旧数据同时继续事务。
     * 2. OnConflictStrategy.ROLLBACK：冲突策略是回滚事务。
     * 3. OnConflictStrategy.ABORT：冲突策略是终止事务。
     * 4. OnConflictStrategy.FAIL：冲突策略是事务失败。
     * 5. OnConflictStrategy.IGNORE：冲突策略是忽略冲突。
     *
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAll(List<ProductEntity> products);


    @Query("SELECT * FROM products WHERE id =:productId")
    LiveData<ProductEntity> loadProductSync(int productId);

    @Query("SELECT products.* FROM products JOIN productsFts ON (products.id = productsFts.rowid) "
            + "WHERE productsFts MATCH :query")
    LiveData<List<ProductEntity>> searchAllProducts(String query);
}
